//
// Copyright (C) [2020] Futurewei Technologies, Inc.
//
// FORCE-RISCV is licensed under the Apache License, Version 2.0 (the "License");
//  you may not use this file except in compliance with the License.
//  You may obtain a copy of the License at
//
//  http://www.apache.org/licenses/LICENSE-2.0
//
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR
// FIT FOR A PARTICULAR PURPOSE.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#include <VmDirectMapControlBlock.h>
#include <sstream>

using namespace std;

/*!
  \file VmDirectMapControlBlock.cc
  \brief Code to configure direct mapping control blocks.
*/

namespace Force {

  VmDirectMapControlBlock::VmDirectMapControlBlock(EPrivilegeLevelType elType, EMemBankType memType)
    : VmControlBlock(elType, memType)
  {
  }

  bool VmDirectMapControlBlock::Validate(std::string& rErrMsg) const
  {
    bool valid_context = true;
    rErrMsg += string("{") + Type() + string("::Validate} Validation mismatches:");
    valid_context &= VmControlBlock::Validate(rErrMsg);

    return valid_context;
  }

  const string VmDirectMapControlBlock::AdditionalAttributesString() const
  {
    stringstream out_str;
    out_str << " : Max-PA=0x" << hex << mMaxPhysicalAddress;
    return out_str.str();
  }

}
